package com.lnt.spring.conversion;

import com.lnt.spring.bean.User;
import org.springframework.core.convert.TypeDescriptor;
import org.springframework.core.convert.converter.ConditionalGenericConverter;

import java.util.Collections;
import java.util.Set;

/**
 * @title : Spring自带的类型转换工具
 * Spring自带的类型转换服务，他要比JDK自带的propertyEditor功能更强大
 * @createDate : 2021-11-13 11:16
 * @creater : LuNanTing
 * @className : StringToUserConverter
 * 单独使用 @see JavaTest.class
 *
 */
public class StringToUserConverter implements ConditionalGenericConverter {

    /**
     * 转换器适配的场景，既符合该方法则使用转换器，不符合则不会进行转换
     * 方法返回boolean
     * @param sourceType 源数据类型,在demo中则表示String，
     * @param targetType 目标数据类型,在demo中表示User.class
     * @return
     */
    @Override
    public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) {
        return sourceType.getType().equals(String.class) && targetType.getType().equals(User.class);
//        return false;
    }

    @Override
    public Set<ConvertiblePair> getConvertibleTypes() {
//        return null;
        return Collections.singleton(new ConvertiblePair(String.class, User.class));
    }

    /**
     * 转换方式逻辑
     * @param source
     * @param sourceType
     * @param targetType
     * @return
     */
    @Override
    public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) {
        User user = new User();
        user.setName((String) source);
        return user;
    }
}
